package net.cocotea.sqltoy.lambda.factory.query;

import net.cocotea.sqltoy.lambda.func.SFunction;
import org.sagacity.sqltoy.model.EntityQuery;

import java.io.Serializable;

/**
 * 实体查询接口
 * 
 * @param <T> 实体类型
 */
public interface ILambdaEntityQuery<T> extends Serializable {
    /**
     * 转换为实体查询对象
     * 
     * @return 实体查询对象
     */
    EntityQuery toEntityQuery();

    /**
     * 选择列
     * 
     * @param cols 列
     * @return 实体查询对象
     */
    ILambdaEntityQuery<T> select(SFunction<T, Object>... cols);

    /**
     * 不选择列
     * 
     * @param cols 列
     * @return 实体查询对象
     */
    ILambdaEntityQuery<T> unselect(SFunction<T, Object>... cols);

    /**
     * 排序
     * 
     * @param cols 列
     * @return 实体查询对象
     */
    ILambdaEntityQuery<T> orderBy(SFunction<T, Object>... cols);

    /**
     * 降序排序
     * 
     * @param cols 列
     * @return 实体查询对象
     */
    ILambdaEntityQuery<T> orderByDesc(SFunction<T, Object>... cols);

    /**
     * 分组
     * 
     * @param cols 列
     * @return 实体查询对象
     */
    ILambdaEntityQuery<T> groupBy(SFunction<T, Object>... cols);
}
